package com.qiwenshare.ufop.util;


import com.qiwenshare.ufop.common.ImageOperation;
import lombok.extern.slf4j.Slf4j;


/**
 * 调用Thumbnails压缩图片
 */
@Slf4j
public class ImgUtil {

    private ImgUtil() {
        throw new UnsupportedOperationException("Cannot instantiate utility class");
    }

    /**
     * 根据指定大小压缩图片
     *
     * @param imageBytes  源图片字节数组
     * @param desFileSize 指定图片大小，单位kb
     * @param imageId     影像编号
     * @return 压缩质量后的图片字节数组
     */
    public static byte[] compressPicForScale(byte[] imageBytes, long desFileSize, String imageId) {
        if (imageBytes == null || imageBytes.length == 0 || imageBytes.length < desFileSize * 1024) {
            return imageBytes;
        }
        long srcSize = imageBytes.length;
        double accuracy = 0.4;
        try {
            imageBytes = ImageOperation.getBytes(desFileSize, imageBytes, accuracy);
            log.info("【图片压缩】imageId={} | 图片原大小={}kb | 压缩后大小={}kb",
                    imageId, srcSize / 1024, imageBytes.length / 1024);
        } catch (Exception e) {
            log.error("【图片压缩】msg=图片压缩失败!", e);
        }
        return imageBytes;
    }

    /**
     * 自动调节精度(经验数值)
     *
     * @param size 源图片大小
     * @return 图片压缩质量比
     */
    public static double getAccuracy(long size) {
        double accuracy;
        if (size < 900) {
            accuracy = 0.5;
        } else if (size < 2047) {
            accuracy = 0.6;
        } else if (size < 3275) {
            accuracy = 0.44;
        } else {
            accuracy = 0.4;
        }
        return accuracy;
    }
}
